/**
 * @file SPIa.c
 * @author      JinChengLong (https://gitee.com/Datejin/)
 * @brief       spi通讯操作W25Q64
 * @version     0.1
 * @date        2023
 * 
 * @copyright   Copyright © 2025 by JinChengLong 
 * 
 * All rights reserved.
 * Unauthorized copying, reproduction, or redistribution of this file via any medium is strictly prohibited.  
 * Proprietary and confidential.
 *   
 */


#include "SPIa.h"







void SPIa_cs(uint8_t a )
{
	GPIO_WriteBit(GPIOD ,GPIO_Pin_14,(BitAction)a);
}

void SPIa_sck(uint8_t a )
{
	GPIO_WriteBit(GPIOE ,GPIO_Pin_9,(BitAction)a);
}

void SPIa_mosi(uint8_t a )
{
	GPIO_WriteBit(GPIOE ,GPIO_Pin_11,(BitAction)a);
}

uint8_t SPIa_miso(void)
{
	 return GPIO_ReadInputDataBit(GPIOD ,GPIO_Pin_0);
}


void SPIa_init(void)
{
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);		
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);		
	
	GPIO_InitTypeDef GPIO_InitStructure;
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	
	
	GPIO_SetBits (GPIOD,GPIO_Pin_4);//VCC
	

	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;			
	GPIO_Init(GPIOE,&GPIO_InitStructure);
	
	
	GPIO_ResetBits (GPIOE,GPIO_Pin_7);//GND
	
	
	SPIa_cs(1);//默认不选从机
	SPIa_sck(0);//用SPI模式0
}

void SPIa_start(void )
{		
	SPIa_cs(0);//写低电平起始
	
}

void SPIa_stop(void )
{		
	SPIa_cs(1);//写高电平终止
	
}


uint8_t SPIa_getbyte(uint8_t bytesend)
{
	uint8_t i ,byteget=0x00;
	for (i=0;i<8;i++)//一个字节
	{
		SPIa_mosi(bytesend & (0x80>>i));//通过掩码将指定提取出来放在mosi上
		SPIa_sck(1);//上升沿从机读取mosi
		if(SPIa_miso()==1)//读取移入的数据
		{
			byteget|=(0x80>>i);//将指定位置高电平
		}
		SPIa_sck(0);//下降沿
	}
	return byteget;
}















